package br.siagefi.model;


import br.siagefi.interfaces.BaseEntity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;


@Entity
@Table(name = "lancamento")
@NamedQuery(name = "Lancamento.buscaFluxoCaixa", 
        query = "SELECT l FROM Lancamento l WHERE l.conta = ?1 AND l.dataPagamento BETWEEN ?2 AND ?3 ORDER BY l.dataPagamento")
public class Lancamento implements Serializable, BaseEntity {
    
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
	 
    @Column(name = "sequencial")
    private long sequencial;
	 
    @Column
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataPagamento;
	 
    @Column(name = "valorPagamento")
    private double valor;
	 
    @Column(name = "situacao", length = 12)
    private String situacao;
    
    @Column(name = "tipo", length = 8)
    private String tipo; 
	 
    @ManyToOne
    @JoinColumn(name = "conta_id")
    private ContaBancaria conta;
    
    @ManyToOne
    @JoinColumn(name = "documento_id")
    private Documento documento;

    public Lancamento() {
        this.documento = new Documento();
    }

    public Lancamento(long sequencial, Date dtPgto, double vlrPgto, String tipo, String sitLcto, ContaBancaria contaLcto, Documento dctoLcto){
        this.sequencial = sequencial;
        this.dataPagamento = dtPgto;
        this.valor = vlrPgto;
        this.tipo = tipo;
        this.situacao  = sitLcto;
        this.conta = contaLcto;
        this.documento = dctoLcto;
    }
    
    @Override
    public Long getId() {
        return id;
    }

    public long getSequencial() {
        return sequencial;
    }

    public void setSequencial(long sequencial) {
        this.sequencial = sequencial;
    }

    public Date getDataPagamento() {
        return dataPagamento;
    }

    public void setDataPagamento(Date dataPagamento) {
        this.dataPagamento = dataPagamento;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public ContaBancaria getConta() {
        return conta;
    }

    public void setConta(ContaBancaria conta) {
        this.conta = conta;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 83 * hash + (int) (this.id ^ (this.id >>> 32));
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Lancamento other = (Lancamento) obj;
        return this.id == other.id;
    }
    
}
 
